package com.scs.application.modules.base.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.scs.application.core.mvc.validation.constraints.Mobile;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
 * 耗材询价单推送实体
 */
@Data
@NoArgsConstructor
@Valid
@Accessors(chain = true)
public class InquiryDTO {

    /**
     * 询价单号
     */
    @Length(min = 1, max = 20, message = "询价单号长度必须介于 1 和 20 之间")
    private String busKey;

    /**
     * 询价日期
     */
    @NotNull(message = "询价日期不能为空")
    private java.util.Date busDate;

    /**
     * SPD询价单ID
     */
    @NotNull(message = "SPD询价单ID不能为空")
    @Length(max = 20, message = "SPD询价单ID长度必须介于 0 和 20 之间")
    private String refId;

    /**
     * 报价开始日期
     */
    @NotNull(message = "报价开始日期不能为空")
    private java.util.Date bidStartDate;

    /**
     * 报价截止日期
     */
    @NotNull(message = "报价截止日期不能为空")
    private java.util.Date bidEndDate;

    /**
     * 科室id
     */
    @NotNull(message = "科室id不能为空")
    private String deptId;

    /**
     * 科室名称
     */
    @NotBlank(message = "科室名称不能为空")
    private String deptName;

    /** 医院ID */
    /*@NotNull(message = "医院ID不能为空")
    private Long hospitalId;

    *//** 医院名称 *//*
    @NotBlank(message = "医院名称不能为空")
    @Length(min = 1, max = 50, message = "医院名称长度必须介于 1 和 50 之间")
    private String hospitalName;

    */
    /**
     * 流程状态
     *//*
    @Length(max = 20, message = "流程状态长度必须介于 0 和 20 之间")
    private String flowStatus;*/

    @Valid
    @NotNull(message = "询价明细不能为空")
    @Size(min = 1, message = "至少一条询价明细")
    private List<InquiryItemDTO> inquiryItems;

    @Valid
    @NotNull(message = "询价目标不能为空")
    @Size(min = 1, message = "至少一个询价目标")
    private List<SupplierDTO> supplierItems;

    @Data
    public static class InquiryItemDTO {

        /**
         * 参考单据标识
         */
        @NotBlank(message = "参考单据标识不能为空")
        @Length(max = 20, message = "参考单据标识长度必须介于 0 和 20 之间")
        private String refId;

        /**
         * 品名
         */
        @NotBlank(message = "品名不能为空")
        @Length(min = 1, max = 100, message = "品名长度必须介于 1 和 100 之间")
        private String materialName;

        /**
         * 品规
         */
        @NotBlank(message = "品规不能为空")
        @Length(min = 1, max = 200, message = "品规长度必须介于 1 和 200 之间")
        private String materialSpec;

        /**
         * 院方分类ID
         */
        @NotBlank(message = "院方分类ID不能为空")
        @Length(min = 1, max = 20, message = "院方分类ID长度必须介于 1 和 20 之间")
        @JsonProperty(value = "catalogId")
        private String catalogIdHospital;

        /**
         * 院方分类名称
         */
        @NotBlank(message = "院方分类名称不能为空")
        @Length(max = 50, message = "院方分类名称长度必须介于 0 和 50 之间")
        @JsonProperty(value = "catalogName")
        private String catalogNameHospital;

        /**
         * 厂商
         */
        @NotBlank(message = "厂商不能为空")
        @Length(min = 1, max = 200, message = "厂商长度必须介于 1 和 200 之间")
        private String manufacturerName;

        /**
         * 单品单位
         */
        @NotBlank(message = "单品单位不能为空")
        @Length(min = 1, max = 10, message = "单品单位长度必须介于 1 和 10 之间")
        private String skuUnit;

        /**
         * 预估价格
         */
        @NotNull(message = "预估价格不能为空")
        private Double skuPrice;

        /**
         * 预估用量/年
         */
        @NotNull(message = "预估用量/年不能为空")
        private Double qtyYear;

        /**
         * 临床科室要求
         */
        @Length(max = 200, message = "临床科室要求长度必须介于 0 和 200 之间")
        private String deptRemark;

        /**
         * 送货地址
         */
        @Length(max = 100, message = "送货地址长度必须介于 0 和 100 之间")
        private String deliveryAddress;

        /**
         * 询价要求
         */
        @Length(max = 100, message = "询价要求长度必须介于 0 和 100 之间")
        private String inquiryRemark;

        /**
         * 最高限价
         */
        private Double skuPriceMax;

        /**
         * 最低限价
         */
        private Double skuPriceMin;

        /**
         * 注册证号
         */
        private String certificateNo;

        /**
         * 阳光采购编码
         */
        private String sunpurchaseCode;

        private List<String> supplierNames;

        /** 询价单ID */
        /*@NotBlank(message = "询价单ID不能为空")
        @Length(min = 1, max = 20, message = "询价单ID长度必须介于 1 和 20 之间")
        private String inquiryId;

        *//** 平台分类ID *//*
        @NotBlank(message = "平台分类ID不能为空")
        @Length(min = 1, max = 20, message = "平台分类ID长度必须介于 1 和 20 之间")
        private String catalogId;

        *//** 平台分类名称 *//*
        @Length(max = 50, message = "平台分类名称长度必须介于 0 和 50 之间")
        private String catalogName;

        *//** 中标价格 *//*
        private Double skuOfficialPrice;

        *//** 中标价来源 *//*
        @Length(max = 20, message = "中标价来源长度必须介于 0 和 20 之间")
        private String skuOfficialPriceSrc;

        *//** 中标供应商ID *//*
        @Length(max = 20, message = "中标供应商ID长度必须介于 0 和 20 之间")
        private String supplierId;

        *//** 中标供应商代码 *//*
        @Length(max = 30, message = "中标供应商代码长度必须介于 0 和 30 之间")
        private String supplierCode;

        *//** 中标供应商名称 *//*
        @Length(max = 100, message = "中标供应商名称长度必须介于 0 和 100 之间")
        private String supplierName;

        *//** 中标采购价格 *//*
        private Double skuPricePurchase;*/

    }

    @Data
    public static class SupplierDTO {

        /**
         * 供应商名称
         */
        @NotBlank(message = "供应商名称不能为空")
        private String name;

        /**
         * 联系人
         */
        private String contactor;

        /**
         * 联系人电话
         */
        @NotBlank(message = "联系手机不能为空")
        @Mobile(message = "手机号格式错误")
        private String mobile;

    }
}

